﻿#define  _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
//这个是俺的代码，不是鹏哥代码想表达的意思鹏哥代码是想写
// 一到十阶乘的和
// 
//int main()
//{
//	//写一个算数字阶乘和的代码
//	int  a = 0;
//	scanf("%d", &a);
//
//	int i = 0;
//	int ret = 1;
//	int sum = 0;
//	for (i = 1;i <= a;i++)
//	{
//
//		ret *= i;
//		sum += ret;
//	}
//	printf("%d", sum);
//	return 0;
//}
// 实现一到十阶乘的和

//int main()
//{
//	int n = 0;
//	int i = 0;
//	int ret = 1;
//	int sum = 0;
//	for (n = 1;n <= 10;n++)
//	{
//		ret = 1;
//		//内层for循环的判断条件是小于等于n因为我们要算的是n这个数的阶乘
//		for (i = 1;i <= n;i++)
//		{
//			//这里注意要初始化ret=1因为；
//			//阶乘是从1开始乘到这个数的
//			//如果不初始化那就会导致ret的值变为多个数的阶乘乘积
//			//ret不能放在内层for循环里面
//			//这样会导致无法到达阶乘的效果
//			//因为ret每次都等于i的值而不是i累乘的结果
//			ret *= i;
//			//sum += ret;
//
//	    }
//		//sum放在这里而不是放在内层for循环的原因是
//		//sum是为了求1-10的阶乘之和
//		sum += ret;
//	}
//	printf("%d", sum);
//	return 0;
//}
//欧克，也是成功将for循环和阶乘搞清楚了

//鹏哥讲了一个bug
////在VS2022、X86、Debug的环境下，
////编译器不做任何优化的话，下⾯代码执⾏的结果是啥？
//#include <stdio.h>
//int main()
//{
//	int i = 0;
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	for (i = 0; i <= 12; i++)
//	{
//		arr[i] = 0;
//		printf("hehe\n");
//	}
//	return 0;
//}
//这个程序运行的结果是死循环打印hehe
//因为在vs，x86这个环境下，
// 数组的下标地址与i的地址是相同的（大概是这样理解）
//栈区的内存使用习惯是从高地址向低地址使用的
//数组内存的储存是随数组下标的增长，从低地址到高地址变化的


//写一个函数求一个数的阶乘
// 不对哈，用递归差点又写成循环了
//数的阶乘可以理解为前一个数的阶乘*这个数
//int fac(int n)
//{
//	if (n <= 1)
//	{
//		return 1;
//	}
//	else
//	{
//		//好像没有问题但我记得鹏哥要想说了不能用if else语句
//		//哈哈哈，记错了鹏哥也用的if else语句
//		//这个就是递归函数自己调用自己
//		//使用递归需要满足的条件
//		//1.需要有限制条件而不是一直自己调自己
//		//2.要越来越接近这个限制条件，不然会导致栈溢出
//		return n * fac(n - 1);
//	}
//}
//
//int main()
//{
//	int  a = 0;
//	scanf("%d", &a);
//	int ret = fac(a);
//	printf("%d", ret);
//	return 0;
//}


//写一个程序使输入的数字依次打印
//还是用递归哈
//void print(int n)
//{
//	////这个代码的意思就是
//	//// 假设 n=123
//	////第一个过程就是把123
//	////分成12和3
//	////那什么不打印3呢
//	////因为3没有进入printf函数而是和12进入了下一个print函数
//	if (n > 9)
//	{
//		print(n / 10);
//	}
//	
//		printf("%d ", n % 10);
//}
//	//if (n > 9)
//	//{
//	//	print(n / 10);
//	//}
//	////喔喔，想起来了，是这里不能用else语句
//	////如果直接用了else语句
//	////呃呃还真不知道会怎样尝试一下
//	//else
//	//	//输入了1134
//	//	//打印结果为5首先1134无论是
//	//	//%10还是/10结果都不为5
//	//	//来试试调试
//	//	//ok懂了就是输入的数除了n次10
//	//	//n为数字的位数，最后不大于9了之后才打印
//
//	//printf("%d ", n % 10);
//}
//int main()
//{
//	int i = 0;
//	scanf("%d", &i);
//
//	print(i);
//
//	return 0;
//}